home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 2 / The 640 Meg Shareware Studio CD-ROM Volume II (Data Express)(1993).ISO / clang / sc_22.zip / CC.H < prev    next >
Text File  |  1988-03-23  |  9KB  |  274 lines

  1. /*
  2. ** CC.H -- Symbol Definitions for Small-C compiler.
  3. */
  4.  
  5. /*
  6. ** machine dependent parameters
  7. */
  8. #define BPW     2   /* bytes per word */
  9. #define LBPW    1   /* log2(BPW) */
  10. #define SBPC    1   /* stack bytes per character */
  11. #define ERRCODE 7   /* op sys return code */
  12.  
  13. /*
  14. ** symbol table format
  15. */
  16. #define IDENT    0
  17. #define TYPE     1
  18. #define CLASS    2
  19. #define SIZE     3
  20. #define OFFSET   5
  21. #define NAME     7
  22.  
  23. #define SYMAVG  12
  24. #define SYMMAX  16
  25.  
  26. /*
  27. ** symbol table parameters
  28. */
  29. #define NUMLOCS   25
  30. #define STARTLOC  symtab
  31. #define ENDLOC    (symtab+NUMLOCS*SYMAVG)
  32. #define NUMGLBS   200
  33. #define STARTGLB  ENDLOC
  34. #define ENDGLB    (ENDLOC+(NUMGLBS-1)*SYMMAX)
  35. #define SYMTBSZ   3050  /* (NUMLOCS*SYMAVG + NUMGLBS*SYMMAX) */
  36.  
  37. /*
  38. ** system wide name size (for symbols)
  39. */
  40. #define NAMESIZE 9
  41. #define NAMEMAX  8
  42.  
  43. /*
  44. ** values for "IDENT"
  45. */
  46. #define LABEL    0
  47. #define VARIABLE 1
  48. #define ARRAY    2
  49. #define POINTER  3
  50. #define FUNCTION 4
  51.  
  52. /*
  53. ** values for "TYPE"
  54. **    high order 14 bits give length of object
  55. **    low order 2 bits make type unique within length
  56. */
  57. /*      LABEL   0 */
  58. #define CHR     (  1 << 2)
  59. #define INT     (BPW << 2)
  60. #define UCHR   ((  1 << 2) + 1)
  61. #define UINT   ((BPW << 2) + 1)
  62. #define UNSIGNED             1
  63.  
  64. /*
  65. ** values for "CLASS"
  66. */
  67. /*      LABEL     0 */
  68. #define AUTOMATIC 1
  69. #define STATIC    2
  70. #define EXTERNAL  3
  71. #define AUTOEXT   4
  72.  
  73. /*
  74. ** segment types
  75. */
  76. #define DATASEG 1
  77. #define CODESEG 2
  78.  
  79. /*
  80. ** "switch" table
  81. */
  82. #define SWSIZ   (2*BPW)
  83. #define SWTABSZ (90*SWSIZ)
  84.  
  85. /*
  86. ** "while" queue
  87. */
  88. #define WQTABSZ  30
  89. #define WQSIZ     3
  90. #define WQMAX   (wq+WQTABSZ-WQSIZ)
  91.  
  92. /*
  93. ** field offsets in "while" queue
  94. */
  95. #define WQSP    0
  96. #define WQLOOP  1
  97. #define WQEXIT  2
  98.  
  99. /*
  100. ** literal pool
  101. */
  102. #define LITABSZ 2000
  103. #define LITMAX  (LITABSZ-1)
  104.  
  105. /*
  106. ** input line
  107. */
  108. #define LINEMAX  127
  109. #define LINESIZE 128
  110.  
  111. /*
  112. ** entries in staging buffer
  113. */
  114. #define STAGESIZE   200
  115.  
  116. /*
  117. ** macro (#define) pool
  118. */
  119. #define MACNBR   300
  120. #define MACNSIZE (MACNBR*(NAMESIZE+2))
  121. #define MACNEND  (macn+MACNSIZE)
  122. #define MACQSIZE (MACNBR*7)
  123. #define MACMAX   (MACQSIZE-1)
  124.  
  125. /*
  126. ** statement types
  127. */
  128. #define STIF      1
  129. #define STWHILE   2
  130. #define STRETURN  3
  131. #define STBREAK   4
  132. #define STCONT    5
  133. #define STASM     6
  134. #define STEXPR    7
  135. #define STDO      8
  136. #define STFOR     9
  137. #define STSWITCH 10
  138. #define STCASE   11
  139. #define STDEF    12
  140. #define STGOTO   13
  141. #define STLABEL  14
  142.  
  143. /*
  144. ** p-code symbols
  145. **
  146. ** legend:
  147. **  1 = primary register (pr in comments)
  148. **  2 = secondary register (sr in comments)
  149. **  b = byte
  150. **  f = jump on false condition
  151. **  l = current literal pool label number
  152. **  m = memory reference by label
  153. **  n = numeric constant
  154. **  p = indirect reference thru pointer in sr
  155. **  r = repeated r times
  156. **  s = stack frame reference
  157. **  u = unsigned
  158. **  w = word
  159. **  _ (tail) = another p-code completes this one
  160. */
  161.  
  162.         /* compiler-generated */
  163. #define ADD12     1   /* add sr to pr */
  164. #define ADDSP     2   /* add to stack pointer */
  165. #define AND12     3   /* AND sr to pr */
  166. #define ANEG1     4   /* arith negate pr */
  167. #define ARGCNTn   5   /* pass arg count to function */
  168. #define ASL12     6   /* arith shift left sr by pr into pr */
  169. #define ASR12     7   /* arith shift right sr by pr into pr */
  170. #define CALL1     8   /* call function thru pr */
  171. #define CALLm     9   /* call function directly */
  172. #define BYTE_    10   /* define bytes (part 1) */
  173. #define BYTEn    11   /* define byte of value n */
  174. #define BYTEr0   12   /* define r bytes of value 0 */
  175. #define COM1     13   /* ones complement pr */
  176. #define DBL1     14   /* double pr */
  177. #define DBL2     15   /* double sr */
  178. #define DIV12    16   /* div pr by sr */
  179. #define DIV12u   17   /* div pr by sr unsigned */
  180. #define ENTER    18   /* set stack frame on function entry */
  181. #define EQ10f    19   /* jump if (pr == 0) is false */
  182. #define EQ12     20   /* set pr TRUE if (sr == pr) */
  183. #define GE10f    21   /* jump if (pr >= 0) is false */
  184. #define GE12     22   /* set pr TRUE if (sr >= pr) */
  185. #define GE12u    23   /* set pr TRUE if (sr >= pr) unsigned */
  186. #define POINT1l  24   /* point pr to function's literal pool */
  187. #define POINT1m  25   /* point pr to mem item thru label */
  188. #define GETb1m   26   /* get byte into pr from mem thru label */
  189. #define GETb1mu  27   /* get unsigned byte into pr from mem thru label */
  190. #define GETb1p   28   /* get byte into pr from mem thru sr ptr */
  191. #define GETb1pu  29   /* get unsigned byte into pr from mem thru sr ptr */
  192. #define GETw1m   30   /* get word into pr from mem thru label */
  193. #define GETw1n   31   /* get word of value n into pr */
  194. #define GETw1p   32   /* get word into pr from mem thru sr ptr */
  195. #define GETw2n   33   /* get word of value n into sr */
  196. #define GT10f    34   /* jump if (pr > 0) is false */
  197. #define GT12     35   /* set pr TRUE if (sr > pr) */
  198. #define GT12u    36   /* set pr TRUE if (sr > pr) unsigned */
  199. #define WORD_    37   /* define word (part 1) */
  200. #define WORDn    38   /* define word of value n */
  201. #define WORDr0   39   /* define r words of value 0 */
  202. #define JMPm     40   /* jump to label */
  203. #define LABm     41   /* define label m */
  204. #define LE10f    42   /* jump if (pr <= 0) is false */
  205. #define LE12     43   /* set pr TRUE if (sr <= pr) */
  206. #define LE12u    44   /* set pr TRUE if (sr <= pr) unsigned */
  207. #define LNEG1    45   /* logical negate pr */
  208. #define LT10f    46   /* jump if (pr < 0) is false */
  209. #define LT12     47   /* set pr TRUE if (sr < pr) */
  210. #define LT12u    48   /* set pr TRUE if (sr < pr) unsigned */
  211. #define MOD12    49   /* modulo pr by sr */
  212. #define MOD12u   50   /* modulo pr by sr unsigned */
  213. #define MOVE21   51   /* move pr to sr */
  214. #define MUL12    52   /* multiply pr by sr */
  215. #define MUL12u   53   /* multiply pr by sr unsigned */
  216. #define NE10f    54   /* jump if (pr != 0) is false */
  217. #define NE12     55   /* set pr TRUE if (sr != pr) */
  218. #define NEARm    56   /* define near pointer thru label */
  219. #define OR12     57   /* OR sr onto pr */
  220. #define POINT1s  58   /* point pr to stack item */
  221. #define POP2     59   /* pop stack into sr */
  222. #define PUSH1    60   /* push pr onto stack */
  223. #define PUTbm1   61   /* put pr byte in mem thru label */
  224. #define PUTbp1   62   /* put pr byte in mem thru sr ptr */
  225. #define PUTwm1   63   /* put pr word in mem thru label */
  226. #define PUTwp1   64   /* put pr word in mem thru sr ptr */
  227. #define rDEC1    65   /* dec pr (may repeat) */
  228. #define REFm     66   /* finish instruction with label */
  229. #define RETURN   67   /* restore stack and return */
  230. #define rINC1    68   /* inc pr (may repeat) */
  231. #define SUB12    69   /* sub sr from pr */
  232. #define SWAP12   70   /* swap pr and sr */
  233. #define SWAP1s   71   /* swap pr and top of stack */
  234. #define SWITCH   72   /* find switch case */
  235. #define XOR12    73   /* XOR pr with sr */
  236.  
  237.         /* optimizer-generated */
  238. #define ADD1n    74   /* add n to pr */
  239. #define ADD21    75   /* add pr to sr */
  240. #define ADD2n    76   /* add immediate to sr */
  241. #define ADDbpn   77   /* add n to mem byte thru sr ptr */
  242. #define ADDwpn   78   /* add n to mem word thru sr ptr */
  243. #define ADDm_    79   /* add n to mem byte/word thru label (part 1) */
  244. #define COMMAn   80   /* finish instruction with ,n */
  245. #define DECbp    81   /* dec mem byte thru sr ptr */
  246. #define DECwp    82   /* dec mem word thru sr ptr */
  247. #define POINT2m  83   /* point sr to mem thru label */
  248. #define POINT2m_ 84   /* point sr to mem thru label (part 1) */
  249. #define GETb1s   85   /* get byte into pr from stack */
  250. #define GETb1su  86   /* get unsigned byte into pr from stack */
  251. #define GETw1m_  87   /* get word into pr from mem thru label (part 1) */
  252. #define GETw1s   88   /* get word into pr from stack */
  253. #define GETw2m   89   /* get word into sr from mem (label) */
  254. #define GETw2p   90   /* get word into sr thru sr ptr */
  255. #define GETw2s   91   /* get word into sr from stack */
  256. #define INCbp    92   /* inc byte in mem thru sr ptr */
  257. #define INCwp    93   /* inc word in mem thru sr ptr */
  258. #define PLUSn    94   /* finish instruction with +n */
  259. #define POINT2s  95   /* point sr to stack */
  260. #define PUSH2    96   /* push sr */
  261. #define PUSHm    97   /* push word from mem thru label */
  262. #define PUSHp    98   /* push word from mem thru sr ptr */
  263. #define PUSHs    99   /* push word from stack */
  264. #define PUT_m_  100   /* put byte/word into mem thru label (part 1) */
  265. #define rDEC2   101   /* dec sr (may repeat) */
  266. #define rINC2   102   /* inc sr (may repeat) */
  267. #define SUB_m_  103   /* sub from mem byte/word thru label (part 1) */
  268. #define SUB1n   104   /* sub n from pr */
  269. #define SUBbpn  105   /* sub n from mem byte thru sr ptr */
  270. #define SUBwpn  106   /* sub n from mem word thru sr ptr */
  271.  
  272. #define PCODES  107   /* size of code[] */
  273.  
  274.